import {loginUser,getUser} from "../../api/login"
import cookei from "js-cookie"
import router from "../../router"

const state={
    userInfo:{
        user_id:'',
        user_name:'',
        //身份的id
        identity_id:'',
        //这个表示当前登录用户的身份字段-----管理者---浏览者
        identity_text:''
    }
}
// mutations---里面定义的函数，是唯一能够修改state里面定义的变量的方法;
const mutations={
    // 调用mutations里面方法的 用----commit();
    // 第一个参数state对象，第二个参数是调用这个方法所传递的参数
   setData(state,data){
       state.userInfo = data;
   }
}
//处理异步的;
const actions={
    //actions 里面定义的方法第一个参数是什么;
    //----第一个参数是vuex实例; 第二个参数是调用这个方法时候所传递的参数
    //-----用什么去调用action里面的方法;  dispatch;
     async setLogin({dispatch},data){
         const {data:res} = await loginUser(data)
         if(res.code!==1){
             alert(res.msg)
         }
         //定义的获取用户信息的方法;
         dispatch('getUser');
         cookei.set('token',res.token);
         //跳转路径;
         router.replace('/home/welcome').catch(error=>error);
     },

     async getUser({commit,dispatch}){
         const {data:res} = await getUser();
         if(res.code!==1){
             alert(res.msg)
         }
         //把请求回来的数据，给存储到本地一下，一会再用;
         sessionStorage.setItem('name',res.data.identity_text);
         //处理筛选的路由的逻辑;
         //如果跨模块进行调用方法，一定要加上第三个参数,{root:true} 表示从根仓库里面去调用某个模块的某个方法;
         dispatch("GetUser/getRouters",res.data.identity_text,{root:true});
         commit("setData",res.data)
     }

}

export default{
    /**
     * 命名空间
     * vuex的store进行模块管理，需要在index.js引入各个模块,
     * 为了解决不同木块的命名冲突问题，将不同的模块设置一个属性namespaced:true,
     * 之后在不同的组件中引入getter，actions,mutations，需要加上模块的名字;  loging/a
     */
    namespaced:true,
    state,
    mutations,
    actions
}